import logging
import os
import traceback

# 设置日志文件目录
log_dir = "../logs"
if not os.path.exists(log_dir):
    os.makedirs(log_dir)

# 配置日志
def setup_logger():
    logger = logging.getLogger("MyAppLogger")
    logger.setLevel(logging.DEBUG)  # 设置日志级别为 DEBUG，记录所有级别的信息

    # 控制台输出
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.DEBUG)  # 控制台输出日志级别为 DEBUG
    console_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    console_handler.setFormatter(console_format)
    logger.addHandler(console_handler)

    # 文件输出
    file_handler = logging.FileHandler(os.path.join(log_dir, "app.log"))
    file_handler.setLevel(logging.DEBUG)  # 文件输出日志级别为 DEBUG
    file_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    file_handler.setFormatter(file_format)
    logger.addHandler(file_handler)

    return logger

# 获取 logger 实例
logger = setup_logger()

# 以下是几个简化的方法，方便使用
def log_debug(message):
    logger.debug(message)

def log_info(message):
    logger.info(message)

def log_warning(message):
    logger.warning(message)

def log_error(message):
    logger.error(message)

def log_critical(message):
    logger.critical(message)

def log_exception(exception):
    """记录异常信息，包括堆栈信息"""
    logger.error("An exception occurred: %s", exception)
    # 打印堆栈信息
    logger.error("".join(traceback.format_exception(None, exception, exception.__traceback__)))
